package LeeJS;

public class J24_Inheritance {
	
	/*
	
			클래스 확장하기
			OOP에서 상속은 매우 중요한 기능임
			상속을 이용해서 기존코드를 확장시켜 클래스를 만들 수 있음
			
			기존 클래스를 확장시켜 새로운 클래스를 만드는 경우
			원래 클래스를 부모, 기본 base 클래스라 하고
			새로은 클래스를 자식, 하위 sub 클래스라 함
			기본 클래스를 확장하는 행위는 크게 2가지로 나눔
			기본 클래스에 없는 새로운 멤버, 메서드를 추가하거나
			기본 클래스에 이미 있는 메서드를 무시하고 새롭게 메서드를 재작성함
			
			클래스 확장시 extends 라는 예약어를 사용
			
			한편, 기본 캘르시를 확장하여 새로운 캘르스를 확장하는 경우 형성되는 특수한 관계는 is-a 임
			예를 들어, Animal 이라는 클래스는 Fish, Tiger, Bug 등의 부모 클래스임
			Fish is Animal, Tiger is Animal, Bug is Animal 처럼 is-a 관계 성립
			
			메서드 재정의 override
			클래스 확장시, 부모 클래스의 메서드 동작을 자식 클래스에서 변경 할 수 있음
			단, final 로 선언된 메서드는 재정의 불가
	
	*/
	
	public static void main(String[] args) {
		
		J24_ParentClass pc = new J24_ParentClass();
		pc.ShowMeTheMoney();
		J24_ChildClass cc = new J24_ChildClass();
		cc.ShowMeTheMoney();
		
		J25_Fish f = new J25_Fish();
		f.eat();
		
	}

}
